% funkcja realizujaca elementarny ruch w wewnwtrznym korytarzu
% kierunek: 1 - w prawo; 2 - w lewo
% rodzaj: 1 - ze zwalanieniem ; 2 - ostatni krok
% indeks_robota - robot dla ktorego przeprowadzamy operacje

% zwracamy: 1 - powodzenie operacji; 0 - niepowodzenie operacji

function ret = ruch(kierunek,rodzaj,indeks_robota)

global roboty
global mapa
global serwer_ob

pozycja = roboty(indeks_robota).pozycja;
start = roboty(indeks_robota).start;
ret = 0;

%okreslamy wjazd do korytarza
 % wjazd zachodni lub wschodni
 korytarz = roboty(indeks_robota).indeks_korytarza; %zapamietujemy indeks aktualnego korytarza
 wjazd = roboty(indeks_robota).start(1) < serwer_ob.korytarze(korytarz,4).x;

   % tutaj okreslamy jakiemu polu w masce korytarza odpowiada aktualna
 % pozycja robota
    punkt = pozycja(1) - start(1);
    if punkt < 0
        start = start  - 7;
        punkt = pozycja(1) - start(1) + 1;
    else
        if wjazd
        punkt = punkt + 1;
        else
            punkt = punkt + 8;
        end
    end
    
    wartosc = indeks_robota;
    if rodzaj == 2 
        wartosc = 0;
    end
   
    
if kierunek == 1 
    if mapa(pozycja(1)+1,pozycja(2)) == wartosc % mozemy wykonac ruch
        if rodzaj > 0 
            roboty(indeks_robota).podstan=0; % ruch z usuwaniem rezerwacji
            %mapa(pozycja(1),pozycja(2)) = 0;  % zwolnienie na mapie 
            roboty(indeks_robota).maska_korytarza(punkt).r = 0; % zwolanienie w masce
        else
            roboty(indeks_robota).podstan=2; % ruch bez usuwania rezerwacji
        end;
        roboty(indeks_robota).droga = pozycja+[1 0];
        wykonaj_ruch(indeks_robota);
        %roboty(indeks_robota).pozycja(1) = roboty(indeks_robota).pozycja(1) + 1;
        %mapa(roboty(indeks_robota).pozycja(1),roboty(indeks_robota).pozycja(2)) = indeks_robota;
        ret = 1;
    end
elseif kierunek == 2
    if mapa(pozycja(1)-1,pozycja(2)) == wartosc % mozemy wykonac ruch
        if rodzaj > 0
            roboty(indeks_robota).podstan=0; % ruch z usuwaniem rezerwacji
            %mapa(pozycja(1),pozycja(2)) = 0;  % zwolnienie na mapie 
            roboty(indeks_robota).maska_korytarza(punkt).r = 0; % zwolanienie w masce
        else
            roboty(indeks_robota).podstan=2; % ruch bez usuwania rezerwacji
        end;
        roboty(indeks_robota).droga = pozycja+[-1 0];
        wykonaj_ruch(indeks_robota);
        %roboty(indeks_robota).pozycja(1) = roboty(indeks_robota).pozycja(1) - 1;
        %mapa(roboty(indeks_robota).pozycja(1),roboty(indeks_robota).pozycja(2)) = indeks_robota;
        ret = 1;
    end
elseif kierunek == 0 % wywolywane tylko gdy robot.podstan==3
    produkt=roboty(indeks_robota).produkty(1);
    y=mod(produkt,1000);
    if(y==6 || y==9 || y==16 || y==19) % poludniowy regal
        wektor = [0 1];
    else
        wektor = [0 -1];
    end;
    roboty(indeks_robota).droga = pozycja+wektor;
    wykonaj_ruch(indeks_robota);
end;
    
  